home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / xpicw / xpicw110.lzh / WLSource / down.s < prev    next >
Encoding:
Text File  |  1997-04-10  |  1.7 KB  |  120 lines

  1. *    down.s
  2. *        下スクロール / 最高速 = 5
  3. *            by Mitsuky
  4.  
  5.  
  6. SPEED_MAX    equ    5
  7.  
  8.     .offset    8        * 引き数
  9. _source_ptr:    .ds.l    1
  10. _dest_ptr:    .ds.l    1
  11. _speed:        .ds.l    1
  12. _vdisp:        .ds.l    1
  13.  
  14.  
  15.  
  16. CRTC_R12    equ    $e8_0018    * スクロールX
  17. CRTC_R14    equ    $e8_001c
  18. CRTC_R16    equ    $e8_0020
  19. CRTC_R18    equ    $e8_0024
  20.  
  21.  
  22.     .text
  23.     .even
  24.  
  25.     .dc.b    'WL10',$0d,$0a
  26.     .dc.b    '下スクロール / 最高速 = 5',$0d,$0a
  27.     .dc.b    '    by Mitsuky',$0d,$0a
  28.     .dc.b    $1a
  29.     .even
  30.  
  31. down:
  32.     link    a6,#0
  33.     movem.l    d1-d7/a0-a5,-(sp)
  34.  
  35.     move.l    _speed(a6),d0    * d0.w =
  36.     bmi    down_ask_speed
  37.     cmpi.l    #SPEED_MAX,d0
  38.     bhi    down_err
  39.  
  40.     tst.l    _vdisp(a6)
  41.     bmi    down_ask_vdisp
  42.  
  43.  
  44.  
  45.     moveq.l    #1,d5
  46.     lsl.w    d0,d5
  47.     move.l    #512,d7
  48.     add.w    d5,d7        * d7.l = スクロール座標
  49.     subq.w    #1,d5        * d5.w = V-SYNC 当たりのループ回数-1
  50.  
  51.     move.w    #512,d6
  52.     lsr.w    d0,d6
  53.     subq.w    #1,d6        * d6.w = ループ回数-1
  54.  
  55.     movea.l    _source_ptr(a6),a3    * a3.l = 転送元アドレス
  56.     movea.l    _dest_ptr(a6),a4    * a4.l = 転送先アドレス
  57.  
  58.  
  59. loop:
  60.     bsr    vdisp
  61.  
  62.     move.l    d7,CRTC_R12
  63.     move.l    d7,CRTC_R14
  64.     move.l    d7,CRTC_R16
  65.     move.l    d7,CRTC_R18
  66.  
  67.     move.w    d5,d4        * d5.w =
  68. loop_y2:
  69.     .rept    32
  70.     movem.l    (a3)+,d0-d3/a0-a2/a5
  71.     movem.l    d0-d3/a0-a2/a5,(a4)
  72.     lea.l    32(a4),a4
  73.     .endm
  74.  
  75.     addq.w    #1,d7
  76.     dbra    d4,loop_y2
  77.     dbra    d6,loop
  78.  
  79.  
  80.  
  81. down_rts:
  82.     moveq.l    #0,d0
  83. down_rts_2:
  84.     movem.l    (sp)+,d1-d7/a0-a5
  85.     unlk    a6
  86.     rts
  87.  
  88.  
  89. ****    ****
  90. vdisp:
  91.     movem.l    a0,-(sp)
  92.     move.l    _vdisp(a6),a0
  93.     jsr    (a0)
  94.     movem.l    (sp)+,a0
  95.     rts
  96.  
  97.  
  98. ****    ****
  99. down_err:
  100.     moveq.l    #-1,d0
  101.     bra    down_rts_2
  102.  
  103.  
  104. ****    ****
  105. down_ask_speed:
  106.     moveq.l    #SPEED_MAX,d0
  107.     bra    down_rts_2
  108.  
  109.  
  110. ****    ****
  111. down_ask_vdisp:
  112.     move.l    _speed(a6),d0
  113.     lea.l    ask_vdisp_table(pc),a0
  114.     add.w    d0,d0
  115.     move.w    (a0,d0.w),d0
  116.     bra    down_rts_2
  117.  
  118. ask_vdisp_table:
  119.     .dc.w    512,256,128,64,32,16
  120.